home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / Programming / Source / Car / AppDelegate.m < prev    next >
Encoding:
Text File  |  1992-06-25  |  5.4 KB  |  260 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import <rpcsvc/bootparam.h>
  5. #import <stdio.h>
  6. #import <strings.h>
  7. #import <defaults.h>
  8. #import <appkit/SavePanel.h>
  9. #import <appkit/OpenPanel.h>
  10. #import <appkit/Application.h>
  11. #import <appkit/Button.h>
  12. #import <appkit/ScrollView.h>
  13. #import <appkit/Text.h>
  14. #import <objc/typedstream.h>
  15. #import "Car_main.h"
  16. #import "AppDelegate.h"
  17. #import "Cycle.h"
  18. #import "Road.h"
  19. #import "Inspector.h"
  20. #import "Car.h"
  21.  
  22. @implementation AppDelegate
  23.  
  24. - init
  25. {
  26.     appDelegate = self;
  27.     openFromWorkspace = YES;
  28.     return self;
  29. }
  30.  
  31. - appDidInit:sender
  32. {
  33. char filename[MAX_PATH_LEN];
  34. int i;
  35.  
  36.     strcpy(filename,NXArgv[0]);
  37.     i = strlen(filename);
  38.     while ( filename[i--] != '/' );
  39.     i++;
  40.  
  41.     if ( cycleFilename[0] == 0 )
  42.         {
  43.         strcpy(&filename[i],"/default.cycle");
  44.         [self loadCycleFile:filename];
  45.         }
  46.     if ( carFilename[0] == 0 )
  47.         {
  48.         strcpy(&filename[i],"/default.car");
  49.         [self loadCarFile:filename];
  50.         }
  51.     if ( roadFilename[0] == 0 )
  52.         {
  53.         strcpy(&filename[i],"/default.environment");
  54.         [self loadRoadFile:filename];
  55.         }
  56.     return self;
  57. }
  58.  
  59. - (BOOL)appAcceptsAnotherFile:sender
  60. {
  61.     return YES;
  62. }
  63.  
  64. - (char *)openFileType:(char *)type
  65. {
  66. char *fileTypes[2];
  67. id openPanel;
  68. static char fullpath[MAX_PATH_LEN];
  69.  
  70.     openFromWorkspace = NO;
  71.     fileTypes[0] = type;
  72.     fileTypes[1] = NULL;
  73.     openPanel = [OpenPanel new];
  74.     [openPanel allowMultipleFiles:NO];
  75.     if ( [openPanel runModalForTypes:fileTypes] )
  76.         {
  77.         strcpy(fullpath,[openPanel directory]);
  78.         strcat(fullpath,"/");
  79.         strcat(fullpath,[openPanel filenames][0]);
  80.         if ( [self app:NXApp openFile:fullpath type:type] )
  81.             return fullpath;
  82.         }
  83.     openFromWorkspace = YES;
  84.     return NULL;
  85. }
  86.  
  87. - openCarFile:sender
  88. {
  89.     [self openFileType:"car"];
  90.     return self;
  91. }
  92.  
  93. - saveCarFile:sender
  94. {
  95. NXTypedStream *typedstream;
  96.  
  97.     if ( carFilename[0] == '\000' )
  98.         [self saveCarFileAs:self];
  99.     if ( (typedstream = NXOpenTypedStreamForFile(carFilename,NX_WRITEONLY)) == NULL )
  100.         return self;
  101.  
  102.     NXWriteObject(typedstream,car);
  103.     NXWriteObject(typedstream,controller);
  104.     NXWriteObject(typedstream,transmission);
  105.     NXWriteObject(typedstream,engine);
  106.     NXWriteObject(typedstream,gasTank);
  107.     NXWriteObject(typedstream,motor);
  108.     NXWriteObject(typedstream,battery);
  109.     NXWriteObject(typedstream,wheel);
  110.  
  111.     NXCloseTypedStream(typedstream);
  112.     [inspector updateCarBox:carFilename];
  113.     return self;
  114. }
  115.  
  116. - saveCarFileAs:sender
  117. {
  118. id savePanel;
  119.  
  120.     savePanel = [SavePanel new];
  121.     [savePanel setRequiredFileType:"car"];
  122.     if ( ![savePanel runModal] )
  123.         return self;
  124.     strcpy(carFilename,[savePanel filename]);
  125.     [self saveCarFile:self];
  126.     return self;
  127. }
  128.  
  129. - (int)app:sender openFile:(const char *)filename type:(const char *)aType
  130. {
  131.     if ( !strcmp(aType,"car") )
  132.         return [self loadCarFile:filename];
  133.     if ( !strcmp(aType,"environment") )
  134.         return [self loadRoadFile:filename];
  135.     if ( !strcmp(aType,"cycle") )
  136.         return [self loadCycleFile:filename];
  137.     return NO;
  138. }
  139.  
  140. - newGraph
  141. {
  142. static NXCoord x = 100;
  143. static NXCoord y = 750;
  144.  
  145.     [NXApp loadNibSection:"Graph.nib" owner:self];
  146.     [[newGraph window] moveTopLeftTo:x :y];
  147.     x += 50;
  148.     y -= 50;
  149.     if ( y < 100 )
  150.         y = 750;
  151.     if ( x > 900 )
  152.         x = 100;
  153.     return newGraph;
  154. }
  155.  
  156. - simulationEnded
  157. {
  158. NXStream *stream;
  159.  
  160.     if ( reportScrollView == nil )
  161.         {
  162.         [NXApp loadNibSection:"Report.nib" owner:self];
  163.         reportText = [reportScrollView docView];
  164.         }
  165.     
  166.     stream = NXOpenMemory(NULL,0,NX_READWRITE);
  167.  
  168.     [car report:stream];
  169.     [road report:stream];
  170.     [battery report:stream];
  171.     [gasTank report:stream];
  172.  
  173.     NXSeek(stream,0,NX_FROMSTART);
  174.     [reportText readText:stream];
  175.     NXCloseMemory(stream,NX_FREEBUFFER);     
  176.     return self;
  177. }
  178.  
  179. - (BOOL)loadCarFile:(const char *)filename
  180. {
  181. NXTypedStream *stream;
  182.  
  183.     if ( (stream = NXOpenTypedStreamForFile(filename,NX_READONLY)) == NULL )
  184.         return NO;
  185.  
  186.     strcpy(carFilename,filename);
  187.     [car free];
  188.     car = NXReadObject(stream);
  189.     [runButton setTarget:car];
  190.     [controller free];
  191.     controller = NXReadObject(stream);
  192.     [transmission free];
  193.     transmission = NXReadObject(stream);
  194.     [engine free];
  195.     engine = NXReadObject(stream);
  196.     [gasTank free];
  197.     gasTank = NXReadObject(stream);
  198.     [motor free];
  199.     motor = NXReadObject(stream);
  200.     [battery free];
  201.     battery = NXReadObject(stream);
  202.     [wheel free];
  203.     wheel = NXReadObject(stream);
  204.  
  205.     if ( openFromWorkspace )
  206.         {
  207.         [inspector updateCarBox:filename];
  208.         [inspector updateBoxes];
  209.         }
  210.     NXCloseTypedStream(stream);
  211.     return YES;
  212. }
  213.  
  214. - (BOOL)loadRoadFile:(const char *)filename
  215. {
  216. NXTypedStream *stream;
  217.  
  218.     if ( (stream = NXMapFile(filename,NX_READONLY)) == NULL )
  219.         return NO;
  220.     strcpy(roadFilename,filename);
  221.     [road loadRoadFromStream:stream];
  222.     if ( openFromWorkspace )
  223.         {
  224.         [inspector updateRoadGraph:filename];
  225.         [inspector updateBoxes];
  226.         }
  227.     NXClose(stream);
  228.     return YES;
  229. }
  230.  
  231. - (BOOL)loadCycleFile:(const char *)filename
  232. {
  233. NXStream *stream;
  234.  
  235.     if ( (stream = NXMapFile(filename,NX_READONLY)) == NULL )
  236.         return NO;
  237.     strcpy(cycleFilename,filename);
  238.     [cycle loadCycleFromStream:stream];
  239.     if ( openFromWorkspace )
  240.         {
  241.         [inspector updateCycleGraph:filename];
  242.         [inspector updateBoxes];
  243.         }
  244.     NXClose(stream);
  245.     return YES;
  246. }
  247.  
  248. @end
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.